ISO/IEC 8859‑13 – kodowanie znaków dla języków bałtyckich
Wstęp
ISO/IEC 8859‑13 (znane także jako Latin‑7 lub ISO Baltic) jest częścią serii ISO/IEC 8859 – ośmiobitowych zestawów znaków przeznaczonych do kodowania tekstu w językach opartych na alfabecie łacińskim. Standard ten został opracowany w celu zapewnienia pełnego wsparcia dla języków bałtyckich: litewskiego, łotewskiego oraz estonijskiego, a także dla języka polskiego i innych języków używających znaków diakrytycznych typowych dla regionu.
Historia
W latach 1995 pojawiła się potrzeba uzupełnienia istniejących zestawów z serii ISO 8859 (np. 8859‑4 – Latin‑4, 8859‑10 – Latin‑6), które nie obejmowały wszystkich znaków niezbędnych w językach bałtyckich. Projekt powstał pod auspicjami ISO i IEC, a ostateczna wersja standardu została przyjęta w 1997 roku. W praktyce kodowanie to jest najczęściej używane w systemach operacyjnych i aplikacjach skierowanych do rynku bałtyckiego, zwłaszcza w Litwie, Łotwie i Estonii.
Zakres znaków
ISO/IEC 8859‑13 zawiera 191 definiowanych znaków (128‑255) plus standardowy zestaw ASCII (0‑127). W przeciwieństwie do niektórych wcześniejszych wersji serii, w 8859‑13 uwzględniono:
- Litery z ogonkami i kropkami charakterystycznymi dla języków bałtyckich:
ą Ą č Č ė Ė ģ Ģ ī Į š Š ū Ū ž Žoraz ich małe odpowiedniki. - Polskie znaki diakrytyczne:
ą Ą ć Ć ę Ę ł Ł ń Ń ó Ó ś Ś ź Ź ż Ż. - Zestaw znaków interpunkcyjnych, symboli walutowych (
€– euro od wersji 1999) i technicznych.
Tablica znaków (wycinek)
| Hex | Unicode | Symbol | Opis |
|---|---|---|---|
| 0xA0 | U+00A0 | Niełamiąca spacja | |
| 0xA1 | U+0104 | Ą | Duża litera A z ogonkiem |
| 0xA2 | U+02D8 | ˘ | Znaczek diakrytyczny (breve) |
| 0xA3 | U+0141 | Ł | Polska litera Ł |
| 0xA4 | U+00A4 | ¤ | Symbol waluty |
| 0xA5 | U+013D | Ľ | Litera L z karonem |
| 0xA6 | U+015A | Ś | Polska litera Ś |
| 0xA7 | U+0160 | Š | Litera S z haachem |
| 0xA8 | U+015E | Ş | Litera S z cedillą (dla języków tureckich) |
| 0xA9 | U+0164 | Ť | Litera T z haachem |
| 0xAA | U+0179 | Ź | Polska litera Ź |
| 0xAB | U+017D | Ž | Litera Z z haachem |
| 0xAC | U+017B | Ż | Polska litera Ż |
| 0xAD | U+00AD | | Miękki podział (soft hyphen) |
| 0xAE | U+0105 | ą | Mała litera a z ogonkiem |
| 0xAF | U+02DB | ˛ | Znaczek diakrytyczny (ogonek) |
Zastosowania
ISO/IEC 8859‑13 jest wykorzystywane w:
- systemach operacyjnych Microsoft Windows (ustawienia regionalne dla języków bałtyckich),
- starszych wersjach Mozilla Firefox i Internet Explorer przed wprowadzeniem pełnego wsparcia Unicode,
- bazach danych i aplikacjach serwerowych, w których wymagana jest zgodność z legacy systemami,
- drukarkach i urządzeniach peryferyjnych obsługujących kodowanie Latin‑7.
Kompatybilność i wsparcie
Choć Unicode stał się de facto standardem kodowania znaków, ISO/IEC 8859‑13 wciąż jest obsługiwany przez większość nowoczesnych języków programowania (np. Python, Java, C#) poprzez odpowiednie nazwy: iso-8859-13, latin7 lub cp28603. W konwersjach danych zaleca się stosowanie konwersji ISO‑8859‑13 → Unicode, co pozwala na zachowanie integralności znaków przy migracji do nowych systemów.
Powiązania z innymi standardami
ISO/IEC 8859‑13 jest jedną z dwunastu części serii ISO/IEC 8859. Na najbliższym poziomie znajduje się ISO/IEC 8859‑10 (Latin‑6), który obsługuje języki skandynawskie, oraz ISO/IEC 8859‑14 (Latin‑8) przeznaczony dla języków celtyckich. Wszystkie te zestawy bazują na wspólnym zestawie kodu ASCII (0‑127) i różnią się jedynie mapowaniem znaków w przedziale 128‑255.
Specyfikacja techniczna
Standard definiuje:
- Układ bajtowy: jeden bajt = jeden znak.
- Porządek kodowy: wielkość znaków nie ma wpływu na kolejność kodu – jest to kodowanie statyczne.
- Kompatybilność z ASCII w zakresie 0‑127.
- Brak znaków sterujących poza tymi zawartymi w ASCII.
Ograniczenia
Pomimo szerokiego wsparcia dla języków bałtyckich, ISO/IEC 8859‑13 nie zawiera znaków niełacińskich (np. cyrylicy, greki) oraz nie obsługuje pełnego zestawu znaków używanych w nowoczesnych aplikacjach internetowych (emoji, znaki matematyczne itp.). Z tego powodu w środowiskach wielojęzycznych zaleca się migrację do Unicode (UTF‑8 lub UTF‑16).
Przykładowe użycie w kodzie
# Python – konwersja z ISO‑8859‑13 do Unicode
tekst_iso = b'\xc4\x85\xea\xea\xed' # ciąg w ISO‑8859‑13
tekst_utf8 = tekst_iso.decode('iso-8859-13')
print(tekst_utf8) # wyświetli: „ąččņ”